package com.alignet.gn.hibernate.dao;

import java.util.List;

import org.hibernate.LockMode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.alignet.gn.hibernate.TgnPassword;

/**
 * A data access object (DAO) providing persistence and search support for
 * TgnPassword entities. Transaction control of the save(), update() and
 * delete() operations can directly support Spring container-managed
 * transactions or they can be augmented to handle user-managed Spring
 * transactions. Each of these methods provides additional information for how
 * to configure it for the desired type of transaction control.
 * 
 * @see com.alignet.gn.hibernate.TgnPassword
 * @author MyEclipse Persistence Tools
 */

public class TgnPasswordDAO extends HibernateDaoSupport {
    private static final Logger log = LoggerFactory
	    .getLogger(TgnPasswordDAO.class);

    protected void initDao() {
	// do nothing
    }

    public void save(TgnPassword transientInstance) {
	log.debug("saving TgnPassword instance");
	try {
	    getHibernateTemplate().save(transientInstance);
	    log.debug("save successful");
	} catch (RuntimeException re) {
	    log.error("save failed", re);
	    throw re;
	}
    }

    public void delete(TgnPassword persistentInstance) {
	log.debug("deleting TgnPassword instance");
	try {
	    getHibernateTemplate().delete(persistentInstance);
	    log.debug("delete successful");
	} catch (RuntimeException re) {
	    log.error("delete failed", re);
	    throw re;
	}
    }

    public TgnPassword findById(java.lang.Integer id) {
	log.debug("getting TgnPassword instance with id: " + id);
	try {
	    TgnPassword instance = (TgnPassword) getHibernateTemplate().get(
		    "com.alignet.gn.hibernate.TgnPassword", id);
	    return instance;
	} catch (RuntimeException re) {
	    log.error("get failed", re);
	    throw re;
	}
    }

    public List<TgnPassword> findByExample(TgnPassword instance) {
	log.debug("finding TgnPassword instance by example");
	try {
	    List<TgnPassword> results = (List<TgnPassword>) getHibernateTemplate()
		    .findByExample(instance);
	    log.debug("find by example successful, result size: "
		    + results.size());
	    return results;
	} catch (RuntimeException re) {
	    log.error("find by example failed", re);
	    throw re;
	}
    }

    public List findByProperty(String propertyName, Object value) {
	log.debug("finding TgnPassword instance with property: " + propertyName
		+ ", value: " + value);
	try {
	    String queryString = "from TgnPassword as model where model."
		    + propertyName + "= ?";
	    return getHibernateTemplate().find(queryString, value);
	} catch (RuntimeException re) {
	    log.error("find by property name failed", re);
	    throw re;
	}
    }

    public List findAll() {
	log.debug("finding all TgnPassword instances");
	try {
	    String queryString = "from TgnPassword";
	    return getHibernateTemplate().find(queryString);
	} catch (RuntimeException re) {
	    log.error("find all failed", re);
	    throw re;
	}
    }

    public TgnPassword merge(TgnPassword detachedInstance) {
	log.debug("merging TgnPassword instance");
	try {
	    TgnPassword result = (TgnPassword) getHibernateTemplate().merge(
		    detachedInstance);
	    log.debug("merge successful");
	    return result;
	} catch (RuntimeException re) {
	    log.error("merge failed", re);
	    throw re;
	}
    }

    public void attachDirty(TgnPassword instance) {
	log.debug("attaching dirty TgnPassword instance");
	try {
	    getHibernateTemplate().saveOrUpdate(instance);
	    log.debug("attach successful");
	} catch (RuntimeException re) {
	    log.error("attach failed", re);
	    throw re;
	}
    }

    public void attachClean(TgnPassword instance) {
	log.debug("attaching clean TgnPassword instance");
	try {
	    getHibernateTemplate().lock(instance, LockMode.NONE);
	    log.debug("attach successful");
	} catch (RuntimeException re) {
	    log.error("attach failed", re);
	    throw re;
	}
    }

    public static TgnPasswordDAO getFromApplicationContext(
	    ApplicationContext ctx) {
	return (TgnPasswordDAO) ctx.getBean("TgnPasswordDAO");
    }
}